#!/bin/bash

# 确保程序已编译
make clean
make -j

# 创建结果目录
mkdir -p results

# 设置测试矩阵大小（M=N=K的方阵）
SIZES=(256 512 1024 2048)

# 测试方法：CPU, DCU, 混合模式
METHODS=( "CPU" "DCU" "Hybrid")
OPTIONS=("-c" "-d" "-h")

# 线程数
THREADS=8

# 每种配置重复测试次数
REPEAT=3

# 结果文件
RESULT_FILE="results/performance_data.csv"

# 创建结果文件表头
echo "Method,Size,Time(ms),GFLOPS,RepeatNum" > $RESULT_FILE

# 执行测试
for i in "${!METHODS[@]}"; do
    METHOD=${METHODS[$i]}
    OPTION=${OPTIONS[$i]}
    
    echo "====================================================="
    echo "开始测试 $METHOD 模式"
    echo "====================================================="
    
    for SIZE in "${SIZES[@]}"; do
        echo "测试矩阵大小: ${SIZE}x${SIZE}"
        
        # 创建输入文件
        INPUT_FILE="input_${SIZE}.txt"
        echo "${SIZE} ${SIZE} ${SIZE}" > $INPUT_FILE
        
        for r in $(seq 1 $REPEAT); do
            echo "重复测试 #$r"
            
            # 运行程序并捕获输出
            OUTPUT_FILE="results/${METHOD}_${SIZE}_${r}.txt"
            
            # 使用自动方式输入矩阵大小
            ./matmul -t $THREADS -T 1 $OPTION -v < $INPUT_FILE > $OUTPUT_FILE 2>&1
            
            # 从输出中提取执行时间和GFLOPS
            TIME_MS=$(grep -o "矩阵乘法: [0-9.]\+ ms" $OUTPUT_FILE | awk '{print $2}')
            if [ -z "$TIME_MS" ]; then
                TIME_MS=$(grep -o "矩阵乘法: [0-9.]\+ s" $OUTPUT_FILE | awk '{print $2 * 1000}')
            fi
            
            GFLOPS=$(grep -o "性能: [0-9.]\+ GFLOPS" $OUTPUT_FILE | awk '{print $2}')
            
            # 将结果添加到CSV文件
            echo "$METHOD,$SIZE,$TIME_MS,$GFLOPS,$r" >> $RESULT_FILE
        done
    done
done

echo "测试完成! 结果保存在 $RESULT_FILE"

# 如果安装了Python和matplotlib，则绘制性能图表
if command -v python3 &> /dev/null; then
    echo "生成性能可视化图表..."
    python3 plot_performance.py
fi 